//代理模式: 在某些情况下, 一个对象不适合或者不能直接被引用访问, 而代理对象可以在客户端和目标对象之间起到中介作用.
// 房东通过中介把房子租出去
#include <iostream>
#include <string>

class RentHouse
{
public:
    virtual void rentHouse() = 0;
};

/*房东类: 将房子租出去*/
class Landlord : public RentHouse
{
public:
    void rentHouse()
    {
        std::cout << "将房子租出去\n";
    }
};

/*中介代理类: 对租房子进行功能加强, 实现租房以外的其他功能*/
class Intermediary : public RentHouse
{
public:
    void rentHouse()
    {
        std::cout << "发布招租启示\n";
        std::cout << "带人看房\n";
        _landlord.rentHouse();
        std::cout << "负责租后维修\n";
    }

private:
    Landlord _landlord;
};

int main()
{
    Intermediary intermediary;
    intermediary.rentHouse();
    return 0;
}